﻿var nav = null;
var geoloc = null;

// 地図用グローバル変数
var gMap = null;

function requestPosition(callback){
	if(nav == null){
		nav = window.navigator;
	}
	if(nav != null){
	  //window.alert(nav.userAgent);
		geoloc = navigator.geolocation;
		if(geoloc != null){
			geoloc.getCurrentPosition(callback);
		} else {
			alert("geolocation is not supported.");
		}
	} else {
		alert("Navigator is not found.");
	}
}

function successCallback(position){
	var lat_id = document.getElementById("lat");
	var lng_id = document.getElementById("lng");
	var lat_param_id = document.getElementById("lat_param");
	var lng_param_id = document.getElementById("lng_param");
	
	// lat:緯度、lng:経度
	var lat = position.coords.latitude;
	var lng = position.coords.longitude;
	
	lat_id.innerHTML = "緯度：" + lat;
	lng_id.innerHTML = "経度：" + lng;
	
	lat_param_id.value = lat;
	lng_param_id.value = lng;
	
	// 緯度経度
	var latlng = new google.maps.LatLng(lat,lng);
	
	// オプション
	var opts = {
		zoom:17,
		center:latlng,
		mapTypeId:google.maps.MapTypeId.ROADMAP
	};
	
	// マップ作成
	var map = new google.maps.Map(document.getElementById("map_canvas"),opts);
	
	var contentString = '<div id="info">'
										+ '<p>おずまの家です</p>'
										+ '<a href="http://google.co.jp">グーグル</a>'
										+ '<p>おなかすいた</p>'
										+ '</div>';

	var infowindow = new google.maps.InfoWindow({
    content: contentString
	});

	//var image = './images/iconshadow.png';
	
	// マーカーの初期設定
	var markerOpts = {
		position:latlng,
		map:map,
		//icon:image,
		title:"現在地"
	};
	
	// マーカーの作成
	var marker = new google.maps.Marker(markerOpts);
	
	google.maps.event.addListener(marker,'click',function(){
		infowindow.open(map,marker);
	});
	
	

}

/* 引数で緯度、経度、ツイッターアイコンを受け取り地図を表示させる */
function displayMap(lat,lng,img){
    var latlng = new google.maps.LatLng(lat,lng);
    
    // オプション
	var opts = {
		zoom:17,
		center:latlng,
		mapTypeId:google.maps.MapTypeId.ROADMAP
	};
	
	// マップ作成
	// gMapはglobal object
	gMap = new google.maps.Map(document.getElementById("map_canvas"),opts);
	
	// マーカーをクリックしたときのウィンドウに表示する内容
	var contentString = 'ここにつぶやいた内容、時間とかを表示させるかなあ';
	var infowindow = new google.maps.InfoWindow({
    content: contentString
	});

    // アイコン
	var icon = img;
	console.log(img);
	
	// マーカーの初期設定
	var markerOpts = {
		position:latlng,
		map:gMap,
		icon:icon
		//title:"現在地"
	};
	
	// マーカーの作成
	var marker = new google.maps.Marker(markerOpts);
	
	google.maps.event.addListener(marker,'click',function(){
		infowindow.open(gMap,marker);
	});
	
	google.maps.event.addListener(gMap, 'dragend', getCenter);
	
}

/* 一気に周辺のつぶやきを地図上に表示する
   テスト中
   @param
	myArray
		[0]lat
		[1]lng
		[2]image(icon)
		[3]tweet内容
	neighborArray
		[0][0]lat
		[0][1]lng
		[0][2]tweet内容
		[0][3]image(icon)
		[1][0]lat
		・
		・
		・
		[n][3]image(icon)
		みたいな感じ
		ほんとはもっとオブジェクトで管理したいけどあんまり詳しくないから配列で・・・
*/
function displayManyTweets(myArray, neighborsArray){
	// まずは自分が中心の地図を表示
    var latlng = new google.maps.LatLng(myArray[0],myArray[1]);
	var opts = {
		zoom:17,
		center:latlng,
		mapTypeId:google.maps.MapTypeId.ROADMAP
	};
	gMap = new google.maps.Map(document.getElementById("map_canvas"),opts);
	// マーカーの初期設定
	var markerOpts = {
		position:latlng,
		map:gMap,
		icon:myArray[2],
		title:myArray[3]
	};
	// マーカーの作成
	var marker = new google.maps.Marker(markerOpts);
	
	// 自分の周辺のツイートを地図上に表示
	var neighborInfowindows = new Array(); // マーカーをクリックしたときに表示させるウィンドウ
	var neighborLatLng = new Array();
	
	for (var i = 0; i < neighborsArray.length; i++) {
		var neighbor = neighborsArray[i];
		//gTweets[i] = neighbor[0];	// Tweet内容
		neighborLatLng[i] = new google.maps.LatLng(neighbor[0], neighbor[1]);
		var neighborMarker = new google.maps.Marker({
			position: neighborLatLng[i],
			map: gMap,
			icon: neighbor[3],
			title: neighbor[2]
		});
		// callback
		addInfoWindow(neighborMarker,neighbor[2]);
	}
	
	// 地図をドラッグしたら、中央の座標を取得して表示、これから活用予定
	google.maps.event.addListener(gMap, 'dragend', getCenter);
}

// マーカー(アイコン)をクリックしたらツイートを表示させる
function addInfoWindow(marker,tweet){
	google.maps.event.addListener(marker,'click',function(){
		new google.maps.InfoWindow({
			content:tweet
		}).open(gMap,marker);
	});
}

/* 近所のツイートを追加してく */
function displayNeighborTweets(neighborsArray){
	var neighborInfowindows = new Array(); // マーカーをクリックしたときに表示させるウィンドウ
	var neighborLatLng = new Array();
	for(var i = 0; i < neighborsArray.length; i++){
		var neighbor = neighborsArray[i];
		neighborLatLng[i] = new google.maps.LatLng(neighbor[0], neighbor[1]);
		var neighborMarker = new google.maps.Marker({
			position: neighborLatLng[i],
			map: gMap,
			icon: neighbor[3],
			title: neighbor[2]
		});
		var content = '<div class="tweet_on_map">';
		content += '<div class="username">' + neighbor[7] + '(' + neighbor[6] + ')</div>';
		content += '<div class="tweet">' + neighbor[2] + '</div>';
		content += '<div class="address">' + neighbor[4] + 'より</div>';
		//content += '<div class="star"><a href="#"><img src=' + WEB_ROOT + 'img/star--plus.png />お気に入りに追加</a></div>';
		content += '<div class="to_profile"><a href="#">' + neighbor[7] + 'さんのプロフィールページへ</a></div>';
		content += '<div class="univ"><a href="#">'+ neighbor[6] +'のつぶやき一覧へ</a></div>';
		content += '</div>';
		//callback
		addInfoWindow(neighborMarker,content);
	}
}

/* 自分の場所だけ表示、テスト用 */
function displayMy(myInfo){
	console.log(myInfo);
	// てかdisplayMapの引数を配列にしただけw
	displayMap(myInfo[0],myInfo[1],myInfo[2]);
}

/* おなじみテスト */
function hoge(){
    window.alert('hoge');
}


function displayAjaxTweet(data){
	
	var neighborInfo = new Array();
	//var myInfo = new Array();
	for(index in data){
		var neighbor = new Array();
		neighbor[0] = data[index]['Location']['lat'];
		neighbor[1] = data[index]['Location']['lng'];
		neighbor[2] = data[index]['Status']['text'];
		neighbor[3] = data[index]['TwitterUser']['profile_image_url'];
		neighbor[4] = data[index]['Location']['Address']['name'];
		neighbor[5] = data[index]['TwitterUser']['name'];
		neighbor[6] = data[index]['User']['Campus']['name'];
		neighbor[7] = data[index]['TwitterUser']['screen_name'];
		neighborInfo[index] = neighbor;
	}
	
	//console.log(neighborInfo);
	//console.log(myInfo);
	if(neighborInfo.length != 0){
		displayNeighborTweets(neighborInfo);
	} else {
		console.log('There are no tweet around here.');
	}
	
	initializeAround(data);
}

/* 地図をドラッグ時に呼ばれるコールバック関数
   地図の中心の緯度、経度を表示する。
   また、地図の四隅の緯度、経度なども取得可能 */
function getCenter(){
    var latlng = gMap.getCenter();	// 中心の取得
	var latlngBounds = gMap.getBounds();	// 地図の領域の取得
	var northEast = latlngBounds.getNorthEast();	// 北東
	var southWest = latlngBounds.getSouthWest();	// 南西
	//console.log(northEast);
	//console.log(southWest);
	var north = northEast.Pa;
	var east = northEast.Qa;
	var south = southWest.Pa;
	var west = southWest.Qa;
	//console.log('n'+north+'e'+east+'s'+south+'w'+west);
    //var str = "地図の中心:[" + latlng.lat() + "," + latlng.lng() + "]<br />";
	//var strBounds = "北東:" + latlngBounds.getNorthEast() + ",南西:" + latlngBounds.getSouthWest() + "<br />";
	//document.getElementById("now_location").innerHTML = str;
	//document.getElementById("bounds").innerHTML = strBounds;
	//console.log(latlngBounds.getNorthEast().Pa);
    //var url = location.protocol + "//" + location.host + "/"; 
    //alert(url);
    //ajax周辺のツイートを取ってくる
    getNeighbors(function(data, dataType){	//成功時のコールバック
		  console.log(data);
		  displayAjaxTweet(data);
		  },
		  null,
		  north, east, south, west
	)
}

/* テスト用、マーカーを増やす
   引数は緯度、経度、住所など
   更につぶやき、アイコンなどの引数も追加予定 */
function addMarker(lat,lng){
    var latlng = new google.maps.LatLng(lat,lng);
    
    var markerOpts = {
        position:latlng,
        map:gMap
    }
    
    // マーカーをクリックしたときのウィンドウに表示する内容
	var contentString = '追加';
	var infowindow = new google.maps.InfoWindow({
    content: contentString
	});
	
    var marker = new google.maps.Marker(markerOpts);
    
    google.maps.event.addListener(marker,'click',function(){
		infowindow.open(gMap,marker);
	});
    
}
function geoCallback(position){
		// lat:緯度、lng:経度
		var lat = position.coords.latitude;
		var lng = position.coords.longitude;
		
		p('lat='+lat+',lng='+lng);
		
		$('#lat').attr("value",lat);
		$('#lng').attr("value",lng);
		
		var href = $('a[tweet-dialog]:first').attr("href");
		var replyHref = $('a[tweet-reply-dialog]:first').attr("href");
		if(oldPostHref == null){
			oldPostHref = href;
		}else{
			href = oldPostHref;
		}
		$('a[tweet-dialog]').each(function(){
			$(this).attr("href",href+"?lat="+lat+"&lng="+lng);
		});
		$('a[tweet-reply-dialog]').each(function(){
			$(this).attr("href",replyHref+"?lat="+lat+"&lng="+lng);
		});
		$('.tweet-post').attr("href",href+"?lat="+lat+"&lng="+lng);
}
var oldPostHref;
$(function(){
	$('#updateBtn').click(function(){
		requestPosition(geoCallback);
		alert("位置情報を更新しました");
	});
	requestPosition(geoCallback);
});